using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;

namespace WindowsApplicationLZ77
{
    /// <summary>
    /// Singleton.
    /// Se debe conocer la carantidad de caracteres que tiene el 
    /// archivo a comprimir, esto es para saber cual va a ser la tabla de codificacion.
    /// </summary>
    class Emite 
    {
        private static Emite instance;

        private static Tabla tabla;

        private ArrayList datos;

        private Emite(int cantCaracteres,int longVentanaMemoria) 
        {
            datos = new ArrayList();
            tabla = Tabla.GetInstance(cantCaracteres,longVentanaMemoria);
        }

        public static Emite GetInstance(int cantCaracteres,int longVentanaMemoria) 
        {
            if ( instance == null)
                instance = new Emite(cantCaracteres,longVentanaMemoria);

            return instance;
        }



        public void Agregar(int posMatch,int longMatch, char caracter)
        {
            datos.Add(new DatoEmite(posMatch, longMatch, caracter));
        }


        public class DatoEmite
        {
            private int _posicion;
            private int _longitud;
            private char _caracter;

            public DatoEmite(int posicion,int longitud, char caracter)
            {
                _posicion = posicion;
                _longitud = longitud;
                _caracter = caracter;
            }

            public String GetCodigoPosicion()
            {
                return tabla.GetCodigo( _posicion );
            }

            internal string GetCodigoLongitud()
            {
                throw new Exception("The method or operation is not implemented.");
            }
        }


        public int GetCantidadParesPLC()
        {
            return instance.datos.Count;
        }

        public Object GetEmision(int pos)
        {
            return datos[pos];
        }
    }
}
